package com.txzt.gaea.aspect.annotation;

import java.lang.annotation.*;

/**
 *  数据权限注解
 *
 *  需控制数据权限的查询接口中，使用注解注入数据权限【查询条件】（需配合查询sql使用）
 *  sql：【需与【tb_flow_biz】业务流程主表连接，注意别名fb】
 *      【is_check】 是否可审核当前步骤--- 查询的业务中数据若需要审核流程，则需在查询返回列中添加该列
 *      若该业务数据需要审核流程，则查询返回【实体类】必须包含【isCheck】字段
 *      固定写法（sql片段前有逗号，需放在最后一列，否则报错）
 *     ｜  @if(!isEmpty(permissionUser)){
 *     ｜    ,#permissionUser# = any(string_to_array(fb.current_step_user, ',')) as is_check
 *     ｜  @}
 *
 *     sql查询条件中，需包含以下片段
 *     ｜  @if(!isEmpty(permissionUser) || !isEmpty(permissionDept)){
 *     ｜     and (
 *     ｜  @}
 *     ｜  @if(!isEmpty(permissionUser)){
 *     ｜     ---A.若该业务数据【无需】审核流程，则：
 *     ｜     pm.create_by = #permissionUser#
 *     ｜     ---B.若该业务数据【需要】审核流程，则：
 *     ｜     #permissionUser# = any(string_to_array(fb.flow_user, ',')) or pm.create_by = #permissionUser#
 *     ｜  @}
 *     ｜  @if(!isEmpty(permissionUser) && !isEmpty(permissionDept)){
 *     ｜     or
 *     ｜  @}
 *     ｜  @if(!isEmpty(permissionDept)){
 *     ｜     pm.dept_id = #permissionDept#
 *     ｜  @}
 *     ｜  @if(!isEmpty(permissionUser) || !isEmpty(permissionUser)){
 *     ｜     )
 *     ｜  @}
 *
 *  查询条件【实体类】必须包含 【permissionUser】 、 【permissionDept】、 【currentUser】三个属性，若是用map作为查询参数也需加上此参数
 *
 *  该注解会自动向查询Object中注入权限查询条件
 *
 */
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
@Documented
@Inherited
public @interface SysDataPermission {

}
